package com.liuqi.openai.keyword;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 关键词提取器
 *
 * @author liuqi
 * @date 2025/8/3
 **/
public interface KeywordExtractor {

    /**
     * 对文本<code>text</code>进行关键词提取, 只提取文本中匹配到的关键词, 返回关键词的词典描述
     *
     * @param text  文本
     * @return  分词结果列表, 如果没有匹配到, 返回空列表
     */
    List<Dictionary> extract(String text);

    /**
     * 对文本<code>text</code>进行关键词提取, 只提取文本中匹配到的关键词
     *
     * @param text  文本
     * @return  分词结果列表, 如果没有匹配到, 返回空列表
     */
    default List<String> extractKeywords(String text) {
        List<Dictionary> dictionaries = extract(text);
        if (dictionaries == null || dictionaries.isEmpty()) {
            return Collections.emptyList();
        }

        // 只提取词典的关键词
        List<String> keywords = new ArrayList<>(dictionaries.size());
        dictionaries.forEach(dictionary -> keywords.add(dictionary.getKeyword()));

        return keywords;
    }

    /**
     * 对文本<code>text</code>进行关键词提取, 提取文本中匹配到的关键词, 并且包含关键词的关联词
     *
     * @param text  文本
     * @return  分词结果列表, 如果没有匹配到, 返回空列表
     */
    default List<String> extractKeywordsIncludeRelated(String text) {
        List<Dictionary> dictionaries = extract(text);
        if (dictionaries == null || dictionaries.isEmpty()) {
            return Collections.emptyList();
        }

        List<String> keywords = new ArrayList<>(dictionaries.size());
        dictionaries.forEach(dictionary -> {
            keywords.add(dictionary.getKeyword());
            if (dictionary.getRelated() != null && dictionary.getRelated().length > 0) {
                for (String related : dictionary.getRelated()) {
                    keywords.add(related);
                }
            }
        });

        return keywords;
    }

}
